package com.qf.pojo;

/**
 * @author lixu
 */
public class B {


    /**
     * 案例1
     *     要求：同学们以后代码发到你面前  直接看出时间复杂度是多少
     *
     *     时间复杂度： 代码执行行数  执行行数越多 代码时间复杂度就越大 时间就越长
     *
     *         O(2) = 执行二行代码
     *          ：底层是计算机CPU的运算量大小   看的CPU
     *          常量：同学们能数的过来就叫常量
     *
     *    O(常量）  < O(logn) < O(sprgn) < O(n) < O(nlogn) < O(n^2) ......
     *
     *    O(1) < O(logn) < O(sprgn) < O(n) < O(nlogn) < O(n^2) ......
     *
     *
     *   时间复杂度  O(1)
     * @return
     */
    public String test1() {

        System.out.println("hello world"); // 需要执行 1 次
        return "你好"; // 需要执行 1 次
    }
    /**
     * f(N) = 2N + 1 + 1 = 2N +2
     *     O(2N) + O(2) ~ O(2N) ~ O(N)
     * N:规模  无穷大
     *
     * 时间复杂度 ~ O(n)
     *
     */
    public int test2(long N) {

        for (int i = 0; i < N; i++) {
            System.out.println("hello world1"); // 需要执行 N 次
            System.out.println("hello world2"); // 需要执行 N 次
        }
        System.out.println("hello world3"); // 需要执行 1 次
        return 1;// 需要执行 1 次
    }
    /**
     * 时间复杂度  O(n^2)
     */
    public int test3(int N) {
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                System.out.println("hello world"); // 需要执行 N*N 次
            }
        }
        return 1;
    }

    /**
     * 时间复杂度  f(N) = N*N + N = N^2 + N ~
     *
     * @param N
     * @return
     */
    public int test4(int N) {
        //循环1：时间复杂度为O(N^2)
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                System.out.println("hello world"); // 需要执行 N*N 次
            }
        }
        //循环2：时间复杂度为O(N)
        for (int i = 0; i < N; i++) {
            System.out.println("hello world1"); // 需要执行 N 次
        }
        return 1;
    }
    /**
     *   时间复杂度 ： 最好情况: O(n)
     *                最坏情况：O(n^2)
     */
    public void test4(int N,boolean flag) {
        if(flag){
            //循环1：时间复杂度为O(N^2)
            for (int i = 0; i < N; i++) {
                for (int j = 0; j < N; j++) {
                    System.out.println("hello world"); // 需要执行 N*N 次
                }
            }
        }else{
            //循环2：时间复杂度为O(N)
            for (int i = 0; i < N; i++) {
                System.out.println("hello world1"); // 需要执行 N 次
            }
        }
    }
}
